//
//  CrowdVoiceItemView.swift
//  imprint
//
//  Created by 小柠檬🍋 on 2025/1/20.
//

import SwiftUI

//制作音色
struct CrowdVoiceItemView: View {
    @EnvironmentObject var themeManager: ThemeManager
    @StateObject var viewModel = CrowdVoiceItemViewModel()
    @StateObject private var paymentManager = PaymentManager()
    
    var item: AiVoiceCrowdBean
    var body: some View {
        Menu {
            commonMenuContent
        } label: {
            VStack{
                HStack{
                    Text(item.name ?? "")
                        .font(.system(size: 16))
                        .foregroundStyle(.bgNormalText2)
                    if (item.status == 0) {
                        Text("(\(item.getProgressStr())%)")
                            .font(.system(size: 14))
                            .foregroundStyle(.bgNormalText4)
                    }
                    Spacer()
                    //正在制作中 或者。已完成
                    if (item.getProgress() >= 100) {
                        Text( item.status == 0 ? "正在制作中..." : "已完成")
                            .font(.system(size: 14))
                            .foregroundStyle(.bgNormalText4)
                    } else {
                        //                    Text("参与")
                        //                        .font(.system(size: 10))
                        //                        .foregroundStyle(themeManager.themeColor)
                        //                        .padding(EdgeInsets(top: 3, leading: 5, bottom: 3, trailing: 5))
                        //                        .background(themeManager.themeColor.opacity(0.3))
                        //                        .cornerRadius(5)
                    }
                }
                ProgressView(value: item.getProgress() / 100).progressViewStyle(LinearProgressViewStyle(tint: item.status == 1 ? .bgItemGray : themeManager.themeColor))
                    .background(.bgItemGray)
            }
        }.padding(.vertical, 10)
            .padding(.horizontal, 20)
            .contentShape(Rectangle())
            .onDisappear {
                AudioPlayerManager.shared.pause()
            }
            .contextMenu {
                commonMenuContent
            }
    }
}


//菜单
extension CrowdVoiceItemView {
    // 将菜单内容抽离为一个计算属性，方便复用
    private var commonMenuContent: some View {
        Group {
            if (item.status == 1 ){
                Button("试听复刻后的声音"){
                    viewModel.doVoice(bean: item)
                }
                Button("购买使用") {
                    showTipsDialog(text: "请试听后满意再购买;\n音色制作更多是一种精确的模仿过程，而非能够实现百分百的完全还原；\n购买后无法退款，请认真考虑后再做决定。") {
                        viewModel.checkVoiceExit(bean: item) { //检查音色是否存在
                            if userManager.getExtraConfig().aiVoiceClone ?? 0 > 0 {
                                viewModel.doBuy(bean: item,deduct: true)
                            } else {
                                showLoadPopup()
                                paymentManager.purchaseProduct(withIdentifier: "com.aiyu.imprint.voice.payment") { result in
                                    // 处理回调结果
                                    switch result {
                                    case .purchasing:
                                        showToast("正在购买...")
                                    case .purchased:
                                        showToast("购买成功")
                                        viewModel.doBuy(bean: item,deduct: true)
                                    case .failed(_):
                                        hideLoadPopup()
                                        showToast("购买失败")
                                    case .restored(let productID):
                                        showLog("恢复购买成功，产品 ID: \(productID)")
                                    case .deferred:
                                        showLog("购买延迟处理")
                                    case .invalidProductID:
                                        hideLoadPopup()
                                        showLog("未找到有效的产品 ID")
                                    case .unknown:
                                        showLog("未知交易状态")
                                    }
                                }
                            }
                        }
                    }
                }
                
            } else {
                Button("试听原音") {
//                        if AudioPlayerManager.shared.isPlaying() {
//                            showToast("正在播放中，请稍后")
//                            return
//                        }
                    AudioPlayerManager.shared.playUrl(from: item.fileId.formatCdn())
                }
                if (item.getProgress() < 100) {
                    Button("参与") {
                        let price = Double(configManager.getConfig().aiChat.aiVoiceClonePrice ?? "0") ?? 0.0
                        let priceStr = "\(price)元"
                        let diffPrice = price - item.price
                        showTipsDialog(text: "因每个人需要的音色需求都不一样，所以这边采用了多人制作模式；\n" +
                                       "1、需要的多人共同制作，当进度达到100%即可制作，参与者都可以使用该音色（满足条件后可全额退款）；\n" +
                                       "2、参与者最低10元，总费用需要\(priceStr)，现在剩余\(diffPrice);\n" +
                                       "3、音色制作更多是一种精确的模仿过程，而非能够实现百分百的完全还原\n" +
                                       "4、制作完成后，当购买人数超过30个后，参与制作的人可以全额退款\n" +
                                       "5、请认真考虑后再做决定。", alignment: .leading) {
                            if !userManager.isLogin() {
                                showLoginPopup()
                                return
                            }
                            showLoadPopup()
                            paymentManager.purchaseProduct(withIdentifier: "com.aiyu.imprint.voice.create.10") { result in
                                // 处理回调结果
                                switch result {
                                case .purchasing:
                                    showToast("正在购买...")
                                case .purchased:
                                    showToast("购买成功")
                                    viewModel.doJoin(crowdBean: item, price: 10.0)
                                case .failed(_):
                                    hideLoadPopup()
                                    showToast("购买失败")
                                case .restored(let productID):
                                    showToast("恢复购买成功，产品 ID: \(productID)")
                                case .deferred:
                                    showToast("购买延迟处理")
                                case .invalidProductID:
                                    hideLoadPopup()
                                    showToast("未找到有效的产品 ID")
                                case .unknown:
                                    showToast("未知交易状态")
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    
}

#Preview {
//    CrowdVoiceItemView(item: AiVoiceCrowdBean())
}
